// 构造 Update 内容
package mgo

import "go.mongodb.org/mongo-driver/bson"

type UpdateInfo struct {
	Update map[string]interface{}
	Way    string
}

func (i *UpdateInfo) BuildUpdate() interface{} {
	// 组装 bson.M
	m := make(bson.M)
	for k, v := range i.Update {
		m[k] = v
	}
	// 判断修改方式
	if len(i.Way) == 0 {
		i.Way = "set"
	}
	switch i.Way {
	case "incr": // 数值类字段进行增减
		return bson.M{"$incr": m} // 举例：bson.M{"$inc": bson.M{"age": -1}}
	case "push": // 条件匹配文档增加一个字段
		return bson.M{"$push": m} // 举例：bson.M{"$push": bson.M{ "interests": "Golang"}}
	case "pull": // 条件匹配文档删除一个字段
		return bson.M{"$pull": m} // 举例：bson.M{"$pull": bson.M{ "interests": "Golang"}}
	default: // 默认为修改条件匹配的数据
		return bson.M{"$set": m} // 举例：bson.M{"$set": bson.M{ "interests": "Golang"}}
	}
}
